package jm.algorithm.sort;

/**
 * @Description 冒泡优化，如果尾部局部有序，不需要进行比较
 * @date 2022/5/2 9:31
 */
public class BubbleSortNotLast<T extends Comparable<T>> extends Sort<T>{
    @Override
    protected void sort() {
        for (int end = arr.length - 1; end > 0; end--) {
            // 默认为完全有序的情况，如果符合一轮扫描就会退出循环，取值只要 end-- 之后不符合循环条件即可
            int sortIndex = 1;
            for (int begin = 1; begin <= end; begin++) {
                if (cmp(begin, begin - 1) < 0){
                    swap(begin, begin - 1);
                    // 记录最后一次交换的位置
                    sortIndex = begin;
                }
            }
            // 保存到扫描最后的位置
            end = sortIndex;
        }
    }
}
